home *** CD-ROM | disk | FTP | other *** search
/ Acorn RISC PD-CD 1 / Acorn RISC PD-CD 1.iso / languages / dde / _pc / h / os < prev    next >
Text File  |  1992-04-30  |  6KB  |  185 lines

  1. (*
  2.  * Title  : os.h
  3.  * Purpose: provides general access to low-level RISC OS routines         
  4.  *        
  5.  *)
  6.  
  7. (*
  8.  * This file is provided as an alternative to kernel.h
  9.  * It provides low-level access to RISC OS.
  10.  * 
  11.  *)
  12.  
  13. # ifndef __os_h
  14. # define __os_h
  15.  
  16. type os_regset_ptr = ^os_regset;
  17.      os_regset =
  18.        record
  19.          r : array[0..9] of integer (* only r0 - r9 matter for SWIs *)
  20.        end;
  21.  
  22. type os_error =
  23.        record
  24.          errnum : integer;          (* error number *)
  25.          errmess : packed array[1..251] of char
  26.                                     (* error message (zero terminated) *)
  27.        end;
  28.  
  29. (* -------------------------------- os_swi ---------------------------------
  30.  * Perform the given SWI instruction, with the given registers loaded.
  31.  * An error results in a RISC OS error being raised.
  32.  * A NULL regset pointer means that no inout parameters are used
  33.  *
  34.  *)
  35. procedure os_swi(swicode : integer; var regs : os_regset); extern;
  36.  
  37. const os_X = $00020000;
  38.  
  39.  
  40. (* ------------------------------- os_swix ---------------------------------
  41.  * Perform the given SWI instruction, with the given registers loaded.
  42.  * Calls returning os_error* use the X form of the relevant SWI. If an error
  43.  * is returned then the os_error should be copied before further system calls
  44.  * are made. If no error occurs then NULL is returned.
  45.  *
  46.  *)
  47. procedure os_swix(swicode : integer;
  48.                 var regs : os_regset) : error; extern;
  49.  
  50.  
  51. (* Important note: if swicode does not have the X bit set, then os_swi is
  52.  * called
  53.  * and these functions return NULL (regardless of whether an error was 
  54.  * raised); please try to use X bit set swicodes to save confusion.
  55.  *
  56.  *)
  57.  
  58.  
  59. (* 
  60.  * SWIs with varying numbers of arguments and results. NULL result pointers
  61.  * mean that the result from that register is not required. The swi codes can
  62.  * be of the X form if required, as specified by swicode.
  63.  *
  64.  *)
  65. procedure os_swi0(swicode : integer) : error; extern;
  66.                                          (* zero arguments and results *)
  67. procedure os_swi1(swicode : integer;
  68.                 r0 : integer) : error; extern;
  69. procedure os_swi2(swicode : integer;
  70.                 r0, r1 : integer) : error; extern;
  71. procedure os_swi3(swicode : integer;
  72.                 r0, r1, r2 : integer) : error; extern;
  73. procedure os_swi4(swicode : integer;
  74.                 r0, r1, r2, r3 : integer) : error; extern;
  75. procedure os_swi6(swicode : integer;
  76.                 r0, r1, r2, r3, r4, r5 : integer) : error; extern;
  77.  
  78. procedure os_swi1r(swicode : integer;
  79.                 r0in : integer;
  80.                 var r0out : integer) : error; extern;
  81. procedure os_swi2r(swicode : integer;
  82.                 r0in, r1in : integer;
  83.                 var r0out, r1out : integer) : error; extern;
  84. procedure os_swi3r(swicode : integer;
  85.                 r0in, r1in, r2in : integer;
  86.                 var r0out, r1out, r2out : integer) : error; extern;
  87. procedure os_swi4r(swicode : integer;
  88.                 r0in, r1in, r2in, r3in : integer;
  89.                 var r0out, r1out, r2out,
  90.                     r3out : integer) : error; extern;
  91. procedure os_swi6r(swicode : integer;
  92.                 r0in, r1in, r2in, r3in, r4in, r5in : integer;
  93.                 var r0out, r1out, r2out,
  94.                     r3out, r4out, r5out : integer) : error; extern;
  95.  
  96.  
  97. (* ------------------------------- os_byte ---------------------------------
  98.  * Perform an OS_Byte SWIx, with x and y passed in register r1 and r2
  99.  * respectively.
  100.  *
  101.  *)
  102. procedure os_byte(a : integer; var x, y : integer) : error; extern;
  103.  
  104.  
  105. (* ------------------------------- os_word ---------------------------------
  106.  * Perform an OS_Word SWIx, with operation number given in "wordcode" and 
  107.  * "p" pointing at necessary parameters to be passed in r1
  108.  *
  109.  *)
  110. procedure os_word(wordcode : integer; p : pointer) : error; extern;
  111.  
  112. type os_gbpbstr_ptr = ^os_gbpbstr;
  113.      os_gbpbstr =
  114.        record
  115.          action : integer;      (* specifies action of osgbpb *)
  116.          file_handle : integer; (* file handle, but may be used as a char *
  117.                                  * pointing to wildcarded dir-name *)
  118.          data_addr : pointer;   (* memory address of data *)
  119.          number, seq_point, buf_len : integer;
  120.          wild_fld : string;     (* points to wildcarded filename to match *)
  121.          reserved : array[0..2] of integer
  122.                                 (* space to allow treatment as reg_block *)
  123.        end;
  124.  
  125.  
  126. (* -------------------------------- os_gbpb --------------------------------
  127.  * Perform an OS_GBPB SWI. os_gbpbstr should be used like an os_regset.
  128.  *
  129.  *)
  130. procedure os_gbpb(b : os_gbpbstr_ptr) : error; extern;
  131.  
  132. type os_filestr_ptr = ^os_filestr;
  133.      os_filestr =
  134.        record
  135.          action : integer;   (* action or object type if output data *)
  136.          name : string;      (* pointer to filename or pathname *)
  137.          loadaddr, execaddr : integer;
  138.                              (* load, exec addresses *)
  139.          start, _end : integer;
  140.                              (* start address/length, end add./attributes *)
  141.          reserved : array[0..3] of integer
  142.                              (* space to allow treatment as reg_block *)
  143.        end;
  144.  
  145.  
  146. (* -------------------------------- os_file --------------------------------
  147.  * Perform an OS_FILE SWI.
  148.  *
  149.  *)
  150. procedure os_file(b : os_filestr_ptr) : error; extern;
  151.  
  152.  
  153. (* ------------------------------- os_args ---------------------------------
  154.  * Perform an OS_Args SWI.
  155.  *
  156.  *)
  157. procedure os_args(r : os_regset_ptr) : error; extern;
  158.  
  159.  
  160. (* ------------------------------ os_find ----------------------------------
  161.  * Perform an OS_Find SWI.
  162.  *
  163.  *)
  164. procedure os_find(r : os_regset_ptr) : error; extern;
  165.  
  166.  
  167. (* ------------------------------ os_cli -----------------------------------
  168.  * Perform an OS_CLI SWI.
  169.  *
  170.  *)
  171. procedure os_cli(cmd : string) : error; extern;
  172.  
  173.  
  174. (* ------------------------------ os_read_var_val --------------------------
  175.  * reads a named environment variable into a given buffer (of size "bufsize")
  176.  * If variable doesn't exist then buf points at a null string.
  177.  *)
  178. procedure os_read_var_val(name : string;
  179.                 buf : string; bufsize : integer) : error; extern;
  180.  
  181.  
  182. # endif
  183.  
  184. (* end of os.h *)
  185.